package com.arpa.ntocc.common.service.impl;

import cn.hutool.core.util.IdUtil;
import com.arpa.ntocc.common.common.cache.PartyGroupCache;
import com.arpa.ntocc.common.common.cache.PartyGroupConfigCache;
import com.arpa.ntocc.common.common.util.CommonUtil;
import com.arpa.ntocc.common.common.util.UserUtil;
import com.arpa.ntocc.common.domain.dto.PartyGroupConfigDTO;
import com.arpa.ntocc.common.domain.entity.PartyGroupConfig;
import com.arpa.ntocc.common.domain.vo.PartyGroupConfigVO;
import com.arpa.ntocc.common.mapper.PartyGroupConfigMapper;
import com.arpa.ntocc.common.service.IPartyGroupConfigService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 机构配置表 服务实现类
 * </p>
 *
 * @author liuyj
 * @since 2019-11-28
 */
@Service
public class PartyGroupConfigServiceImpl extends ServiceImpl<PartyGroupConfigMapper, PartyGroupConfig> implements IPartyGroupConfigService {

    @Autowired
    @Lazy
    private PartyGroupCache partyGroupCache;

    @Autowired
    @Lazy
    private PartyGroupConfigCache partyGroupConfigCache;

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    public boolean save(PartyGroupConfig entity) {
        if(StringUtils.isBlank(entity.getCode())){
            entity.setCode(IdUtil.simpleUUID());
        }
        if(StringUtils.isBlank(entity.getCreatedBy())){
            entity.setCreatedBy(UserUtil.getCode());
            entity.setModifiedBy(UserUtil.getCode());
        }
        if(StringUtils.isBlank(entity.getBranchCode())){
            entity.setBranchCode(UserUtil.getBranchCode());
        }
        //清空机构缓存
        partyGroupCache.flushCache(UserUtil.getBranchCode());
        return super.save(entity);
    }

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    @Override
    public int updateByCode(PartyGroupConfig entity) {
        //清空机构缓存
        partyGroupCache.flushCache(UserUtil.getBranchCode());
        //清空机构配置缓存
        partyGroupConfigCache.flushCache(entity.getType(),entity.getConfigKey());
        return baseMapper.update(entity,new QueryWrapper<PartyGroupConfig>().lambda().eq(PartyGroupConfig::getCode,entity.getCode()));
    }

    /**
     * 查询列表
     * @param partyGroupConfigDTO
     * @return
     */
    @Override
    public List<PartyGroupConfigVO> queryList(PartyGroupConfigDTO partyGroupConfigDTO){
        //排序字段名需要驼峰转数据库下划线类型字段名
        if(StringUtils.isNotEmpty(partyGroupConfigDTO.getSortField())){
            partyGroupConfigDTO.setSortField(CommonUtil.camel2Underline(partyGroupConfigDTO.getSortField()));
        }
        List<PartyGroupConfigVO> partyGroupConfigVOList = baseMapper.queryList(partyGroupConfigDTO);
        return partyGroupConfigVOList;
    }

    /**
     * 查询合计,包含总数
     * @param partyGroupConfigDTO
     * @return
     */
    @Override
    public PartyGroupConfigVO queryListSum(PartyGroupConfigDTO partyGroupConfigDTO){
        PartyGroupConfigVO partyGroupConfigVO = baseMapper.queryListSum(partyGroupConfigDTO);
        return partyGroupConfigVO;
    }

    /**
     * 删除
     * @param codes
     */
    @Override
    public void removeObj(List<String> codes) {
        baseMapper.delete(new QueryWrapper<PartyGroupConfig>().lambda().in(PartyGroupConfig::getCode,codes));
    }
}
